﻿using Orleans; 

namespace DeviceClientGrain
{
    /// <summary>
    /// 传输机台集合（可按工序分组，也可按分组）
    /// </summary>
    public interface IDeviceGroup:IGrainWithStringKey
    {
        Task<List<string>> 选择可用传输机台地标(int 产线 = -1,List<string>? 不可去的地标列表=null);

        Task 更新物料数量(string DeviceID, int InNum,int OutNum);

        Task 启用禁用(string MarkerID, bool Disable);

        Task 修改产线(string MarkerID, string  产线);


        /// <summary>
        /// 传输机台的地标只能确定位置，不包含机台的通信信息
        /// </summary>
        /// <param name="MarkerID"></param>
        /// <returns></returns>
        Task<string> 地标对应的机台标识(string MarkerID);

       
        Task 重置信息( );
          

        Task<NextProcess> 获取下道工序(string  MarkerID);

        #region 协议相关

        Task 需要传输(string DeviceID, bool Flag);

        Task 通知AGV离开(string DeviceID);
        Task 通知AGV传输(string DeviceID, TransDirectionEnum type);


        #endregion
    }


    #region 发送给传输机台的数据

    public enum TransDirectionEnum
    {  
        上层传出,
        上层传入,
        下层传出,
        下层传入,
        上收下出,
        上出下收
    }


    [Serializable]
    public class MsgData
    {
        public string DeviceID { get; set; } = "";
        public string Cmd { get; set; } = "";
    }

    #endregion

    #region

    [Serializable]
    public class NextProcess
    {
        public string DeviceGroup { get; set; } = "";
        public int  line { get; set; }   
    }

    #endregion
}
